{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Semi Gradient  SARSA($\\lambda $)\n",
    "\n",
    "In this notebook, we will be using SARSA($\\lambda$) with function approximation using Tiles to solve Mountain Car Environment. We will look at couple of eligibility traces. By setting trace to None, it will work same as the previous n-step SARSA. Further, by setting lambda = 0, we will get TD(0) SARSA\n",
    "\n",
    "![nStepSARSA](./images/nstepSarsa.png \"n-Step SARSA\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import sys\n",
    "import os\n",
    "import time\n",
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "import gym\n",
    "\n",
    "import io\n",
    "import base64\n",
    "from IPython.display import HTML\n",
    "import glob"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Mountain Car Environment\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "env = gym.make('MountainCar-v0') # rest of the code is designed to work only for this environment. It will require change for other environments\n",
    "\n",
    "# increase episode length from 200 to 4000\n",
    "env._max_episode_steps = 500\n",
    "\n",
    "np.random.seed(13)\n",
    "env.reset()\n",
    "print(\"Mountain Car Environment\")\n",
    "plt.imshow(env.render('rgb_array'))\n",
    "env.close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "# the implementation of tiles3 is from Richard Sutton's website\n",
    "# http://incompleteideas.net/tiles/tiles3.html\n",
    "from tiles3 import IHT, tiles"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "def accumulating_trace(trace, active_features, gamma, lambd):\n",
    "    trace *= gamma * lambd\n",
    "    trace[active_features] += 1\n",
    "    return trace\n",
    "\n",
    "def replacing_trace(trace, active_features, gamma, lambd):\n",
    "    trace *= gamma * lambd\n",
    "    trace[active_features] = 1\n",
    "    return trace\n",
    "\n",
    "class QEstimator:\n",
    "\n",
    "    def __init__(self, step_size, num_of_tilings=8, tiles_per_dim=8, \n",
    "                 max_size=2048, epsilon=0.0, trace_fn=replacing_trace, \n",
    "                 lambd=0, gamma=1.0):\n",
    "        \n",
    "        self.max_size = max_size\n",
    "        self.num_of_tilings = num_of_tilings\n",
    "        self.tiles_per_dim = tiles_per_dim\n",
    "        self.epsilon = epsilon\n",
    "        self.lambd = lambd\n",
    "        self.gamma = gamma\n",
    "        \n",
    "        self.step_size = step_size / num_of_tilings\n",
    "        self.trace_fn = trace_fn\n",
    "        \n",
    "        self.table = IHT(max_size)\n",
    "        \n",
    "        self.w = np.zeros(max_size)\n",
    "        self.trace = np.zeros(max_size)\n",
    "        \n",
    "        self.pos_scale = self.tiles_per_dim / (env.observation_space.high[0] \\\n",
    "                                                  - env.observation_space.low[0])\n",
    "        self.vel_scale = self.tiles_per_dim / (env.observation_space.high[1] \\\n",
    "                                                  - env.observation_space.low[1])\n",
    "        \n",
    "    def get_active_features(self, state, action):\n",
    "        pos, vel = state\n",
    "        active_features = tiles(self.table, self.num_of_tilings,\n",
    "                            [self.pos_scale * (pos - env.observation_space.low[0]), \n",
    "                             self.vel_scale * (vel- env.observation_space.low[1])],\n",
    "                            [action])\n",
    "        return active_features\n",
    "        \n",
    "    def q_predict(self, state, action):\n",
    "        pos, vel = state\n",
    "        if pos == env.observation_space.high[0]:  # reached goal\n",
    "            return 0.0\n",
    "        else:\n",
    "            active_features = self.get_active_features(state, action)\n",
    "            return np.sum(self.w[active_features])\n",
    "        \n",
    "    \n",
    "    # learn with given state, action and target\n",
    "    def q_update(self, state, action, reward, next_state, next_action):\n",
    "\n",
    "        active_features = self.get_active_features(state, action)\n",
    "\n",
    "        q_s_a = self.q_predict(state, action)\n",
    "        target = reward + self.gamma * self.q_predict(next_state, next_action)\n",
    "        delta = (target - q_s_a)\n",
    "\n",
    "        if self.trace_fn == accumulating_trace or self.trace_fn == replacing_trace:\n",
    "            self.trace = self.trace_fn(self.trace, active_features, self.gamma, self.lambd)\n",
    "        else:\n",
    "            self.trace = self.trace_fn(self.trace, active_features, self.gamma, 0)\n",
    "                \n",
    "        self.w += self.step_size * delta * self.trace        \n",
    "        #self.w += self.step_size * delta * self.trace        \n",
    "        \n",
    "    def get_eps_greedy_action(self, state):\n",
    "        pos, vel = state\n",
    "        if np.random.rand() < self.epsilon:\n",
    "            return np.random.choice(env.action_space.n)\n",
    "        else:\n",
    "            qvals = np.array([self.q_predict(state, action) for action in range(env.action_space.n)])\n",
    "            return np.argmax(qvals)\n",
    "            \n",
    "    \n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "def sarsa_lambda(qhat, episode_cnt = 10000, max_size=2048, gamma=1.0):\n",
    "    episode_rewards = []\n",
    "    for i in range(episode_cnt):\n",
    "        state = env.reset()\n",
    "        action = qhat.get_eps_greedy_action(state)\n",
    "        qhat.trace = np.zeros(max_size)\n",
    "        episode_reward = 0\n",
    "        while True:\n",
    "            next_state, reward, done, _ = env.step(action)\n",
    "            next_action = qhat.get_eps_greedy_action(next_state)\n",
    "            episode_reward += reward\n",
    "            qhat.q_update(state, action, reward, next_state, next_action)\n",
    "            if done:\n",
    "                episode_rewards.append(episode_reward)\n",
    "                break\n",
    "            state = next_state   \n",
    "            action = next_action\n",
    "    return np.array(episode_rewards)\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# plot rewards\n",
    "def plot_rewards(env_name, rewards, label):\n",
    "    plt.title(\"env={}, Mean reward = {:.1f}\".format(env_name,np.mean(rewards[-20:])))\n",
    "    plt.plot(rewards, label=label)\n",
    "    plt.grid()\n",
    "    plt.legend()\n",
    "    plt.ylim(-500, 0)\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX8AAAEICAYAAAC3Y/QeAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAABPeklEQVR4nO2dd5gV1fnHP+82eu+9KCC9LSBIWREBwYYNe4sxGkvUGIPBGKISiSXG/GyxoomCFTXYUVaKIL0jfZGFpUrZRRa2nN8fM/fu3Llz21bc+36eZ5+9c6adM3Pme97znibGGBRFUZT4IqGiI6AoiqKUPyr+iqIocYiKv6IoShyi4q8oihKHqPgriqLEISr+iqIocYiKvxITIvKZiFxX0fGoCEQkXURuCrGvrYgYEUkq73hVduznempFx6OyoeJfgdhiYkSkpyv8Qzs8rRziENOHZYw5xxjzegnud6WILBGRHBHJsguTwcW9nuvaX4jIfY7tFnb6vMKalsY9i4OjoFjmCm8oIidEJKOCoha3iEg3O//sF5GgwU8iUl9EZojIURHZLiJXOvZdZedn39/P9vvtG+Je6SKS6zh+Q1mmLRQq/hXPRuBa34aINABOB/ZVWIzKCBG5B/gn8DegCdAaeA64oBjX8rKw5wDDHNtDgR88wjYZY3bHcC8RkbL4VmqISDfH9pXAtjK4T8xURA2mgmtNecA7wK9C7H8WOIGVb68CnheRrgDGmDeNMTV9f8Bvga3AshDXArjdcU6nUktFDMS1+ItIcxF5X0T2icg2EbnTsW+SiLwjIm+ISLaIrBWRVHvfBBF5z3Wtp0XkX8WIxpvAeBFJtLevAGZgZTTftauIyD9FZJf9908RqWLvu15E5rni4rfmRWSqiDwrIp/Y6fheRE6x982xT1lpWyDjRaSeiMy0n8lB+3dLx7X9rg/fvUXkCfvYbSJyTohnXQd4CLjNGPOBMeaoMSbPGPM/Y8wf7GP6i8gCETlk1wqeEZEUV7puE5FNwCaP28wBznAI9RCswibVFTbHvt4gEVksIoft/4Nc6ZwsIvOBn4H2rvQk2uneLyJbgbFe6Y7AfwCnC+1a4A3XfcLl0Wie1y0issl+P8+KiHhFxM7v74nIf0XkCHC9iNQRkVfsa+8UkUd8+VQs67ev/ftq+15d7O2bROTDGOIY8E5F5A/2sbtE5MZiPNeYMcZsMMa8Aqx17xORGsDFwJ+NMTnGmHnAx8A1IS53HfCGOdmnTzDGxOUfVsG3FHgQSMH6uLcCo+z9k4BcYAyQCDwKLLT3tcEShNr2diKQBZxubz8HHArxt8oRh3TgJuBL4Bw7bBEwEMgE0uywh4CFQGOgEfAd8LC973pgnittBjjV/j0V+AnoDyRhFTbTvY61txtgZfTqQC3gXeBDd5wd984Dfm0/g1uBXYB4PO/RQD6QFOad9MWq9SQBbYH1wF2uuH4F1AeqeZxfBTgG9La319jvdb4r7Fr7GgexPuAkrEL3INDAkc4fga72/mRX2m/BqlW0sq81245fyPQ54tnWPrYtsMN+dp2BDcAIICPKPBrN85oJ1MWqZe0DRoeI0yT7XV5o37ca8CHwb6AGVt5bBPzGPv4N4Pf27xeBLcCtjn13F+ed2vlkD9DNvu9buPKoK95RfWsx6MKpgHGF9QaOucLuBf7ncX4boABoF+Ye6fa72I+VN9MqRAMr4qYnwx8wAPjRFXY/8Jr9exIwy7GvizMDAPOAa+3fZwNbihGHdCzxvxqYBnQCNtr7nOK/BRjjOG8URQJxPZHF/2XHvjHAD17HhohjL+CgO86Oe2927KtuX6+px3WuAnbH+HzuAma44jo8imf6O1tMMu2wKY6wQvsDvQZY5Dp3AXC94zoPeb0v+/c3wC2OfSOJXfyTgFn2+5wCTCRQ/MPm0Sif12DH9jvAhBDnTgLmOLabAMdxFLJYBeRs+/evgI/t3+ux8vF0e3s70Kc47xR4FZji2O4YKY+W5h/e4j/EnXexDJ50j/P/7BXuOmYAlmFVBauWkA2cUh7pc/7Fc8+ENkBzETnkCEsE5jq2nX7hn4GqIpJkjMnHskiuwLJyrrS3i8sHwJPAASxXgJvmWB+Uj+12WLS401Ez1IEiUh14CssCq2cH1xKRRGNMQbhrG2N+tr0KXtc/ADR0PD+ve3cE/gGkYhUkSViWr5MdoeJuMwfLr5+BVUBj/7/BDtthjNkuIu5nir3dIsp7NXftd18rWt7AKkQH2fHu4NgXNo9G+byifvcEpqcNVm0ny+EpSnAc8y3whFgN54nA28BfRKQtUAdYEUMcnfdt7tpf3OcaEhG5CqtGAzDXGOPpqnSQA9R2hdXGEm0312K1aYXEGPO9Y/N1EbkCyyj7vwjxKFXi2ee/A9hmjKnr+KtljBkT5fnvAmm2P3wcDvEXkRcksPXf+RfkUzTG/Ax8huU28RL/XVgfo4/WdhjAUayPynfvkvZi+T1WDWSAMaY2liABePqKY2ABlhvtwjDHPI/lSulg3/tPHveN5Eedg2WpDaWoIJ8PnGGH+do53M8UrOe6M8p7ZWG5fJznFof3sdoLthpj3EIXKY9G87xiwZneHViWf0PHvWsbY3yNnJuxCpM7sWoM2VgFzc1YNdHCGOLovG9MzzXWb82Ou7OBNpLwg9UpI0lEnAVzT1ztAyJyBlbhFdAeGAWGkn9fMRPP4r8IOCIifxSRanYDXjcR6RfNycaYfVhugNewPtD1jn23ODKX+69riEv+CRhmjMnw2DcNeEBEGolIQywf8H/tfSuBriLSS0SqYlXfY2EPgY2ZtbD85odEpD7wlxiv54kx5jBWvJ8VkQtFpLqIJIvIOSLymOPeR4AcETkNqzCMle+wfNxXY4u/MeYglo/1aorE/1Ogo1hdT5NEZDyWa29mlPd5B7hTRFqKSD1ggnOn3YCaHukixpijwHAst4mbSHm0NJ5XqHhlYbVFPSkitUUkQUROEZFhjsO+BW63/4P1PTi3ixPHd7Aam7vYtdCw+a+Y31oQYlEVq20FEakqdqcK+x19ADwkIjVskb+AYEPtOuB9uyAMdZ+6IjLKvn6SXQsZCnwRbVxLi7gVf9uFcR6WT3sbVuPLy1hV1mh5C8tHWxKXjy8+u4zVi8CLR4AlwCpgNVYXskfs8zZiNQjPwuotEeoaoZiEVfU8JCKXYfWOqYb1PBYCn8d4vZAYY/4B3AM8gCXGO7DE4kP7kHuxXGjZwEtYroRY7/EzltugClbjro+5WI2Wc+zjDgDnYtV0DgD3AecaY/ZHeauXsD7YlVjv4wPX/lZYNY5o4rzEGLPFIzxSHi3x84rAtVhiuA6rMfw9oJlj/7dY4j4nxHbMcTTGfIaVB78BNtv/y4M2WEaPz5o/htUA7+O3WN/FXixj7FZjjN/ytwuOy4CgMTAi8icR+czeTMb6dn0NvncAFxpjyr2vv9gNEIqilCIisgI4yy5kFOWkQ8VfURQlDqkwt4+IjBaRDSKyWUQmRD5DURRFKS0qxPK3RwluxOofnwksBq4wxqwr98goiqLEIRVl+ffHGhy01RhzAphOMeZ3URRFUYpHRQ3yakHgwI5MrFFvAYjIzVj9hqlWrVrfVq1auQ+JisLCQhIS4qtjk6Y5PtA0xwclSfPGjRv3G2MaucMrSvy9BjQE+Z+MMS9izRtCamqqWbJkSbFulp6eTlpaWrHO/aWiaY4PNM3xQUnSLCKeo6QrqvjMJHAUX0uKRqwqiqIoZUxFif9ioIOItLOnd70ca4pURVEUpRyoELePMSZfRG7HGiGZCLzqHC2nKIqilC0VNqunMeZTrPlVlEpGXl4emZmZ5Obmlut969Spw/r16yMfWInQNMcH0aS5atWqtGzZkuTk5KiuGc9TOitlRGZmJrVq1aJt27aI98JRZUJ2dja1atUqt/udDGia44NIaTbGcODAATIzM2nXrl1U14yv/lJKuZCbm0uDBg3KVfgVJZ4RERo0aBBTbVvFXykTVPgVpXyJ9ZtT8VcURYlDVPyVSsnkyZPp2rUrPXr0oFevXnz//feRT4qCQYMGeYbv2bOHK6+8kvbt29O3b18GDhzIjBkzSnSvSZMm8cQTTwSFb9iwgbS0NHr16kVqaio333xzwP6nnnqKqlWrcvjwYX9Yeno6derUoXfv3px22mnce++9AXE/99xz6dmzJ126dGHMmMDF7GbMmIGI8MMPPwSEZ2Vlce655wKwY8cOOnbsyJ///OeAY2bOnMlf/hJ5PaCMjAyqVatGr1696NKlC9deey15eXkRz/Ni6tSp3H777cU6d8yYMRw6dKhY5zrJyMjgrbdKvMxHmaLir1Q6FixYwMyZM1m2bBmrVq1i1qxZFHdqEDffffddUJgxhgsvvJChQ4eydetWli5dyvTp08nMzAw6Nj/fc/nimLjzzju5++67WbFiBUuWLOGOO+4I2D9t2jT69esXVPgMGTKE5cuXs3z5cmbOnMn8+dZaMw8++CBnn302K1euZN26dUyZMiXoeoMHD2b69OkB4f/4xz/49a9/DUCrVq1YuXIlr7/+Ovv27fMfM3bsWD7++GN+/vnniOk65ZRTWLFiBatXryYzM5N33nkn+odSSnz66afUrVu3xNcJJ/6lkQdKAxV/pdKRlZVFw4YNqVKlCgANGzakeXNrvfulS5cybNgw+vbty6hRo8jKygIgLS2Nu+++m6FDh9K5c2cWL17MRRddRIcOHXjggQf8165ZM3j982+++YaUlBRuueUWf1ibNm38ojx16lQuvfRSzjvvPEaOHElOTg5nnXUWffr0oXv37nz00Uf+8yZPnkynTp0YMWIEGzZ4L+6UlZVFy5Yt/dvdu3f3/96yZQs5OTk88sgjTJs2zfN8n4W9c+dOz+v16NHD/zsnJ4f58+fzyiuvBIn/+++/z+jRowOuO3jw4ADRFhHS0tKYOTPa1TEhMTGR/v37++Pnfme7d1tr0qelpXHXXXcxaNAgunXrxqJFi4Ku9b///Y8BAwbQu3dvRowYwZ49e/zpuuGGG+jevTs9evTg/fffB6Bt27bs37+fjIwMOnfuzK9//Wu6du3KyJEjOXbsGACLFy+mR48eDBw4kD/84Q9069Yt6L4TJkxg7ty59OrVi6eeeiqmPPDGG2/Qo0cPevbsyTXXXAPA/v37ufjii+nXrx/9+vXzF9wlQbt6KmXKX/+3lnW7jpTqNbs0r81fzgu9POvIkSN56KGH6NixIyNGjGD8+PEMGzaMvLw87rjjDj766CMaNWrE22+/zcSJE3n11VcBSElJYc6cOTz99NNccMEFLF26lPr163PKKadw991306BBA8/7rV27lj59+oSN84IFC1i1ahX169cnPz+fGTNmULt2bfbv38/pp5/O+eefz7Jly5g+fTrLly8nPz+fPn360Ldv36Br3X333QwfPpxBgwYxdOhQbr31Vr+1Om3aNK644gqGDBnChg0b2Lt3L40bNw44/+DBg2zatImhQ4cCcNtttzF+/HieeeYZRowYwQ033OAvLD/88ENGjx5Nx44dqV+/PsuWLaNPnz5s27aNevXq+QtYsAR11qxZZGRkcNttt/nDU1NTmTt3LpdddlnYZ+QjNzeX77//nqefftrznT300EP85z/W8rlHjx7lu+++Y86cOdx4442sWbMm4FqDBw9m4cKFiAgvv/wyjz32GE8++SQPP/wwderUYfXq1f5n4mbTpk1MmzaNl156icsuu4z333+fq6++mhtuuIEXX3yRQYMGMWGC91IkU6ZM4YknnvAXelOnTo0qD6xbt47Jkyczf/58GjZsyE8//QTAfffdx913383gwYP58ccfGTVqVInHOqj4K5WOmjVrsnTpUubOncvs2bMZP348U6ZMITU1lTVr1nD22WcDUFBQQLNmRUvSnn/++YBlSXft2tW/r3379uzYsSOk+Lu57bbbmDdvHikpKSxevBiAs88+m/r16wOWm+hPf/oTc+bMISEhgZ07d7Jnzx7mzp3LuHHjqF69ekB83Nxwww2MGjWKzz//nPfff5/XX3+dlStXUqVKFaZPn86MGTNISEjgoosu4t133/UL8dy5c+nRowcbNmxgwoQJNG3aFIBRo0axdetWPv/8cz777DN69+7NmjVraNSoEdOmTeOuu+4C4PLLL2fatGn06dOHrKwsGjUKnCjytdde4+qrr+bzzz9n69attG/fHoDGjRuza1fkqbu2bNlCr1692LRpE5dccgk9evRgzZo1Qe/Med8rrrgCgKFDh3LkyJEgf31mZibjx48nKyuLEydO+PvAz5o1K6AmU69evaD4tGvXjl69egHQt29fMjIyOHToENnZ2f62nyuvvDLqWk00eeCbb77hkksuoWHDhgD+49PT09m0aZP/WkeOHCnxeAcVf6VMCWehlyWJiYmkpaWRlpZG9+7def311+nbty9du3ZlwYIFnuf4rNiEhIQAizYhISGsn7Zr165+twHAs88+y/79+0lNTfWH1ahRw//7zTffZN++fSxdupTk5GTatm3r758dbXe95s2bc+ONN3LppZcycOBA1qxZQ3JyMps2bfIL5YkTJ2jfvr1f/IcMGcLMmTPZuHEjgwcPZty4cX5xq1+/PldeeSVXXnkl5557LnPmzCEtLY1vvvmGNWvWICIUFBQgIjz22GNUq1YtoE+5MYbnnnuOzz77jAYNGvDWW2/53WW5ublUq1YtYpp8Pv+srCzS0tL4+OOPadeuXdA7y87O9v92Py/39h133ME999zD+eefT3p6OpMmTfLHN9KzduaBxMREjh07RkkWv4omD4SKV2FhIQsWLIjqOUaL+vyVSseGDRsCrKQVK1bQpk0bOnXqxL59+/xCkpeXx9q1JZ9Savjw4eTm5vL888/7w8I1cB4+fJjGjRuTnJzM7Nmz2b7dmnF36NChzJgxg2PHjpGdnc3//vc/z/M///xzf0+YPXv2cODAAVq0aMG0adOYNGkSGRkZZGRksGvXLnbu3Om/vo+OHTty//338/e//x2w2ix88c3OzmbLli20bt2a9957j2uvvZbt27eTkZHBjh07aNeuHfPmzaNjx45kZGT4rzlz5ky6d+9O27ZtueqqqwIaOzdu3OjpFw9Fs2bNmDJlCo8++qjnO3O6O95++20A5s2bR506dahTp07Qs27RogUAr7/+uj985MiRPPPMM/5tL7ePF/Xq1aNW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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# create a n-SARSA Learning agent\n",
    "step_size = 0.8\n",
    "episode_cnt = 1000\n",
    "epsilon= 0.0\n",
    "gamma = 1.0\n",
    "lambd = 0.5\n",
    "env = gym.make('MountainCar-v0') \n",
    "env._max_episode_steps = 500\n",
    "np.random.seed(13)\n",
    "\n",
    "## You can use of the two traces to see how they behave\n",
    "## they will not have much difference in limit but behave differently to the parameters step_size, lambda \n",
    "## esp. in the early cycle of leraning. YOu can refer to Chapter 12 of Sutton and Barto book for a detailed\n",
    "## explanation and derivation\n",
    "#estimator = QEstimator(step_size, epsilon=epsilon, lambd = lambd, gamma=gamma, trace_fn=replacing_trace)\n",
    "estimator = QEstimator(step_size, epsilon=epsilon, lambd = lambd, gamma=gamma, trace_fn=accumulating_trace)\n",
    "rewards = sarsa_lambda(estimator, episode_cnt = episode_cnt, gamma=gamma)\n",
    "\n",
    "#plot rewards\n",
    "plot_rewards(\"Mountain Car World\",rewards, 'Semi Grad SARSA(λ). Replacing trace')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "def generate_animation(env, estimator, save_dir):\n",
    "    \n",
    "    if not os.path.exists(save_dir):\n",
    "        os.makedirs(save_dir)\n",
    "\n",
    "    try:\n",
    "        env = gym.wrappers.Monitor(\n",
    "            env, save_dir, video_callable=lambda id: True, force=True, mode='evaluation')\n",
    "    except gym.error.Error as e:\n",
    "        print(e.what())\n",
    "\n",
    "    state = env.reset()\n",
    "    t = 0\n",
    "    while True:\n",
    "        time.sleep(0.01)\n",
    "        action = estimator.get_eps_greedy_action(state)\n",
    "        state, _, done, _ = env.step(action)\n",
    "        env.render()\n",
    "        t += 1\n",
    "        if done:\n",
    "            print('Solved in {} steps'.format(t))\n",
    "            break\n",
    "            \n",
    "def display_animation(filepath):\n",
    "    video = io.open(filepath, 'r+b').read()\n",
    "    encoded = base64.b64encode(video)\n",
    "    return HTML(data='''<video alt=\"test\" controls>\n",
    "                <source src=\"data:video/mp4;base64,{0}\" type=\"video/mp4\" />\n",
    "                 </video>'''.format(encoded.decode('ascii')))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Solved in 104 steps\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<video alt=\"test\" controls>\n",
       "                <source src=\"data:video/mp4;base64,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\" type=\"video/mp4\" />\n",
       "                 </video>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Animate learned policy\n",
    "save_dir='./videos/5_2/'\n",
    "generate_animation(env, estimator, save_dir=save_dir)\n",
    "[filepath] = glob.glob(os.path.join(save_dir, '*.mp4'))\n",
    "display_animation(filepath)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "env.close()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
